Checksum校验和的原理和python脚本的实现 您所在的位置:网站首页 mysql checksum算法原理 Checksum校验和的原理和python脚本的实现

Checksum校验和的原理和python脚本的实现

2023-08-08 00:28| 来源: 网络整理| 查看: 265

checksum校验和简介

checksum是小尺寸的数据从一个块导出的数字数据为目的的检测错误,可能其期间已经被引入传输或存储。它通常在从下载服务器接收到安装文件后应用于安装文件。校验和本身通常用于验证数据完整性,但不依赖于校验数据的真实性。

从数据输入产生校验和的实际过程称为校验和函数或校验和算法。根据其设计目标,良好的校验和算法通常会输出显着不同的值,即使对输入进行的小改动也是如此。加密散列函数尤其如此,它可用于检测许多数据损坏错误并验证整体数据完整性 ; 如果当前数据输入的计算校验和与先前计算的校验和的存储值匹配,则数据未被意外地改变或损坏的可能性非常高。

校验和函数与散列函数,指纹,随机函数和加密散列函数有关。但是,每个概念都有不同的应用,因此具有不同的设计目标。例如,返回字符串开头的函数可以提供适合某些应用程序的散列,但永远不会是合适的校验和。校验和在较大的身份验证算法中用作加密原语。对于具有这两个特定设计目标的加密系统,请参阅HMAC。

校验位和奇偶校验位是校验和的特殊情况,适用于小块数据(例如社会保险号,银行帐号,计算机字,单字节等)。一些纠错码基于特殊校验和,不仅可以检测常见错误,还可以在某些情况下恢复原始数据。

win环境下产生校验和的方法 Get-Hashfile 文件路径 -Algorithm 校验类型(MD5,SHA256....)

在这里插入图片描述

checksum校验和算法:

1、 先将需要计算checksum数据中的checksum设为0; 2、 计算checksum的数据按2byte划分开来,每2byte组成一个16bit的值,如果最后有单个byte的数据,补一个byte的0组成2byte; 3、 将所有的16bit值累加到一个32bit的值中; 4、 将32bit值的高16bit与低16bit相加到一个新的32bit值中,若新的32bit值大于0Xffff, 再将新值的高16bit与低16bit相加; 5、 将上一步计算所得的16bit值按位取反,即得到checksum值,存入数据的checksum字段即可

举一个网上看到的例子:

如计算下面一段数据的checksum,数据为16进制; 45 00 00 3c 00 00 00 00 40 11 6d 36 c0 a8 2b c3 08 08 08 08 11 6d 36为checksum字段,先把checksum设0,数据分组,补0,整理完后数据如下,中间checksum设置为0,最后补1byte 0; 4500 003c 0000 0000 4011 0000 c0a8 2bc3 0808 0808 1100 计算:4500+003c+0000+0000+4011+0000+c0a8+2bc3+0808+0808+1100 = 192C8 高低16bit相加: 1 + 92C8 = 92C9 取反: ~92C9 = 6D36 最后所得数据为:45 00 00 3c 00 00 00 00 40 11 6d 36 c0 a8 2b c3 08 08 08 08 11

checksum的代码实现 import os if __name__ == '__main__': fd = open("12.txt", 'r') checksum = 0 ind = 0 for (num, line) in enumerate(fd): if num > 10: break for start in range(0, len(line), 2): if 106 == ind or 107 == ind or 112 == ind: ind += 1 continue if start >= len(line) - 2: break # print '%s:%d' %(line[start:start+2], int(line[start:start+2], 16)) checksum = long( ((checksum > 1) & 0xFFFFFFFF) + long(line[start:start + 2], 16)) print 'sector:%d, byte:%d, checksum:%08x' % (num, ind, checksum) ind += 1 print '%08x' % checksum


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有